package clases
{
	import flash.data.SQLConnection;
	import flash.data.SQLStatement;
	import flash.errors.SQLError;
	import flash.events.*;
	import flash.filesystem.File;
	
	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	
	
	public class UtilDB
	{
		[Bindable]   public var _var:Variables = Variables.getInstance();
		
		public function UtilDB()
		{
			_var.conexion = new SQLConnection();
			_var.conexion.addEventListener(SQLEvent.OPEN, crearTablas);
			_var.conexion.addEventListener(SQLErrorEvent.ERROR, 
				function(event:SQLErrorEvent):void
				{
					Alert.show("Error de conexion --> "+event.error.message);
				});        
			_var.conexion.open(File.applicationStorageDirectory.resolvePath("baseDeDatos.db"));
		}
		
		private function crearTablas(e:SQLEvent):void
		{
			var   consulta1:String   = "CREATE TABLE IF NOT EXISTS alumnos(user_id INTEGER PRIMARY KEY AUTOINCREMENT,direccion TEXT,servicio TEXT)";   
			hacerConsulta(consulta1, actualizarAlumnos);
					
		}		
		
		
		private function actualizarAlumnos(i:Object = null):void
		{
			var consulta      :String         = "SELECT * FROM alumnos"; 
			hacerConsulta(consulta,
				function (e:Object):void
				{
					_var.datosDB = new ArrayCollection(e.data);
				}  
			);
		}
		public function agregarDato():void
		{
			var   consulta:String   =   "INSERT INTO alumnos (direccion, servicio) VALUES ('"+_var.Direccion.text+ "','" +_var.Servicio.text+"')";            
			
			hacerConsulta(consulta, actualizarAlumnos);			    
		}
		public function eliminarAlumno():void
		{
			var   consulta:String   =   "DELETE FROM alumnos WHERE user_id = " + _var.id.text;
			hacerConsulta(consulta, actualizarAlumnos);    
		}
		public function modificarAlumno():void
		{
			var   consulta:String   =   "UPDATE alumnos SET direccion   = '"+ _var.Direccion.text + "', " +"servicio = '"+ _var.Servicio.text+ "', WHERE  user_id = " + _var.id.text;
			
			hacerConsulta(consulta, actualizarAlumnos);
		}      
		private function hacerConsulta(consulta:String, f:Function = null):void
		{
			var declaracion               :SQLStatement    = new SQLStatement();
			
			declaracion.sqlConnection                = _var.conexion;         
			declaracion.text                     = consulta;
			
			declaracion.addEventListener            (SQLEvent.RESULT,
				function (e:SQLEvent):void
				{
					if(f != null)
					{
						f(e.target.getResult());                     
					}
				}
			);
			declaracion.addEventListener(SQLErrorEvent.ERROR, 
				function(event:SQLErrorEvent):void
				{
					Alert.show("Error de conexion --> "+event.error.message);
				});      
			declaracion.execute();
		}      
	}
}